package cn.zyq.ykb.beans.sys;


import cn.zyq.ykb.system.common.BaseBean;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;

import javax.persistence.*;
import java.io.Serializable;
import java.util.Set;


/**
 * 角色信息表
 * 2023-05-12 20:14:09
 */
@Entity
@Table(name = "`sysRole`")
@Data
public class SysRole extends BaseBean implements Serializable {

    private static final long serialVersionUID = 6300517816825231246L;

    /**
     * 角色ID
     */
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY, generator = "JDBC")
    @Column(name = "`sysRoleID`")
    @ApiModelProperty("角色ID")
    private Integer sysRoleID;

    /**
     * 角色名称
     */
    @Column(name = "`roleName`")
    @ApiModelProperty("角色名称")
    private String roleName;

    /**
     * 角色权限字符串
     */
    @Column(name = "`roleKey`")
    @ApiModelProperty("角色权限字符串")
    private String roleKey;

    /**
     * 显示顺序
     */
    @Column(name = "`roleSort`")
    @ApiModelProperty("显示顺序")
    private Integer roleSort;

    /**
     * 数据范围（1：全部数据权限 2：自定数据权限 3：本部门数据权限 4：本部门及以下数据权限）
     */
    @Column(name = "`dataScope`")
    @ApiModelProperty("数据范围（1：全部数据权限 2：自定数据权限 3：本部门数据权限 4：本部门及以下数据权限）")
    private String dataScope;

    /**
     * 菜单树选择项是否关联显示
     */
    @Column(name = "`menuCheckStrictly`")
    @ApiModelProperty("菜单树选择项是否关联显示")
    private Boolean menuCheckStrictly;

    /**
     * 部门树选择项是否关联显示
     */
    @Column(name = "`deptCheckStrictly`")
    @ApiModelProperty("部门树选择项是否关联显示")
    private Boolean deptCheckStrictly;

    /**
     * 角色状态（0正常 1停用）
     */
    @Column(name = "`status`")
    @ApiModelProperty("角色状态（0正常 1停用）")
    private String status;

    /**
     * 备注
     */
    @Column(name = "`remark`")
    @ApiModelProperty("备注")
    private String remark;


    /**
     * 用户是否存在此角色标识 默认不存在
     */
    @Transient
    private Boolean flag = false;

    /**
     * 菜单组
     */
    @Transient
    private Integer[] menuIds;

    /**
     * 部门组（数据权限）
     */
    @Transient
    private Integer[] deptIds;

    /**
     * 角色菜单权限
     */
    @Transient
    private Set<String> permissions;

    public Boolean isAdmin() {
        return isAdmin(this.sysRoleID);
    }

    public static Boolean isAdmin(Integer roleId) {
        return roleId != null && 1 == roleId;
    }


    public SysRole(Integer roleId) {
        this.sysRoleID = roleId;
    }

    public SysRole() {

    }

}
